package customview.demo;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * 为什么要扩展现有的View?
 * 扩展现有的View是为了避免重新实现现有的逻辑，而做到为应用程序裁剪它需要的UI和功能。
 * 
 * STEP1. 	继承你要扩展的View

 * STEP2.  	定义资源，这些资源将在扩展View时被使用。
 *				a. 在/res/values文件夹下创建一个新的colors.xml资源。为纸张、页边空白、线和文本添加颜色值。
 * 			   	b. 创建一个新的dimes.xml资源文件，为纸张的页边空白的宽度添加值。
 * 
 *	STEP3. 	重写新的View的外观或行为，重写和扩展与想要改变的行为有关的事件处理器。
 * 				onDraw方法被重写来修改View的外观，onKeyDown处理器被重写来允许特定的按键响应：
 * 				a. 使用定义好的资源创建Paint对象
 * 				b. 使用创建的Paint对象来画外观。一旦你画完了外观，调用父类的onDraw方法来画文字。
 * 
 * STEP4.   放置View到布局容器中 <customview.demo.ExtendExistingView />   
 *
 */
public class ExtendExistingView extends TextView{

	// 在后台代码中创建给对象时调用该构造函数
	public ExtendExistingView(Context context) {
		super(context);
		init();
	}
	
	// Constructor required for inflation from resource file
	public ExtendExistingView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}
	
	// Constructor required for inflation from resource file
	public ExtendExistingView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		//设置背景色
		canvas.drawColor(paperColor);

		// 画顶线和底线
		canvas.drawLine(0, 0, getMeasuredHeight(), 0, linePaint);
		canvas.drawLine(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(), linePaint);
		
		// 画边距
		canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint);
		
		// 从边缘移动文本
		canvas.save();
		canvas.translate(margin, 0);
		
		// 使用TextView去渲染文本
		super.onDraw(canvas);
		canvas.restore();
		
	}

	////画笔,包含了画几何图形、文本等的样式和颜色信息  
	private Paint marginPaint;
	private Paint linePaint;
	private int paperColor;
	private float margin;

	 

	private void init() {
	// 获取Resource引用
	Resources myResources = getResources();

	// 创建画刷
	marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
	marginPaint.setColor(myResources.getColor(R.color.notepad_margin));
	linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
	linePaint.setColor(myResources.getColor(R.color.notepad_lines));

	//获得画布的背景颜色好外边距宽度
	paperColor = myResources.getColor(R.color.notepad_paper);
	margin = myResources.getDimension(R.dimen.notepad_margin);

	}
	
}
